import request from '@/config/axios'
import { CouponTemplateVO } from '../promotion/coupon/couponTemplate'

export interface Property {
  propertyId?: number // 属性编号
  propertyName?: string // 属性名称
  valueId?: number // 属性值编号
  valueName?: string // 属性值名称
}

export interface Sku {
  ruleValue?: any //前端自定义储存规则
  skuId?: number // 商品 SKU 编号
  spuName?: string // 商品  名称
  properties?: Property[] // 属性数组
  price?: number | string | undefined // 商品价格 零售价
  priceType?: number | string | undefined //商品价格类型
  marketPrice?: number | string // 市场价 (划线价)
  costPrice?: number | string // 成本价
  barCode?: string // 商品条码
  picUrl?: string // 图片地址
  stock?: number | string | null // 库存
  weight?: number // 商品重量，单位：kg 千克
  volume?: number // 商品体积，单位：m^3 平米
  salesCount?: number // 商品销量
  firstBrokeragePrice?: number | string // 一级分销的佣金
  secondBrokeragePrice?: number | string // 二级分销的佣金
  firstBrokeragePercent?: number | string // 一级分销的佣金 比例
  secondBrokeragePercent?: number | string // 二级分销的佣金 比例
  firstBrokerageType?: number | string // 一级分销的佣金类型
  secondBrokerageType?: number | string // 二级分销的佣金类型
  skuType?: number //商品属性
  skuTypeName?: string //商品属性名称
  usableTimes?: number | undefined //可用次数  普通|卡项|可用次数 以单次用量为标准，算出此商品理论可用次数。例如商品50g，单次用量5g，则理论使用次数为10次
  merchantCode?: string //商家编码
  unit?: string //商品单位
  lowPrice?: number | string //最低价
  isDebtSales?: boolean //是否欠款销售
  isGive?: boolean //是否支持赠送
  status?: number
  // 卡项
  usableDuration?: number | undefined //可用时长
  usableDurationUnit?: number | undefined //可用时长单位
  servicesFee?: number | string //手工费
  servicesDuration?: number | undefined //单次服务所需时长
  isServices?: boolean //是否计算手工量 关闭或开启。
  isPerformance?: boolean //是否计算消耗业绩  关闭或开启。
  performanceType?: number //卡项消耗业绩计算方式-左侧选择
  performanceReference?: number //卡项消耗业绩计算基准
  performanceValue?: number | string // 卡项固定业绩 单位:分
  performanceUnit?: number //卡项消耗业绩计算方式-右侧选择，0 元/日， 1 %/月
  commission?: number | string //消耗提成 单位:分
  commissionUnit?: number //消耗提成方式 0 分 1 百分比
  isDebtServices?: boolean //卡项|是否支持欠款销售
  refundDeadline?: number //退款时限
  isAfterSale?: boolean //支持售后 关闭或开启。
  debtServicesType?: number //欠款服务类型

  // 活动
  activityStartTime?: string //活动商品开始时间
  activityEndTime?: string //活动商品结束时间
  isUpdated?: number //N选N活动是否允许修改
  number?: number | string //活动N类
  deductionScopes?: EmptyArrayType //N选N活动 活动抵扣设置类型
  generalProductList?: EmptyArrayType //N选N活动关联商品列表
  // 储值卡
  cardValue?: number | string //储值卡金额
  useDiscountType?: EmptyArrayType //储值卡/付费会员使用折扣类型
  allDiscount?: number //全部商品折扣
  appointTypeDiscount?: any ///指定商品类型
  appointSkusDiscount?: any //储值卡| 指定商品规则
  isGift?: boolean //储值卡|是否支持赠送金额
  giftValue?: number | string //赠送金额
  expiryDate?: string //有效期
  expiryDateUnit?: string | number //|有效期单位：日、月、年、不限,
  dedLevel?: number //扣款优先
  giftAccountType?: number //赠金到账 0一次到账 1周期到账
  giftAccountDType?: number //到账方式 0统一 1单一设置
  giftAccountSet?: {
    intoAccountDateMonth?: number //储值卡|单一设置|到账日期中的月，多条递增月数 单位：月
    intoAccountDateDay?: number // 储值卡|统一设置or 单一设置|到账日期中的日 单位：日
    intoAccountMoney?: number | undefined //储值卡|统一设置|到账金额 即赠金多次均分固定时间到账 单位：分
  }[] //储值卡|到账方式对应规则
  // 付费会员
  tabsName?: string //标签卡名称 前端自用
  typeDiscountGoods?: EmptyArrayType //指定商品类型 前端自用
  consumerMoney?: number | string //积分规则 消费多少元
  consumerPoints?: number //积分规则 积多少分
  rechargeMoney?: number | string //积分规则 充值多少元
  rechargePoints?: number //积分规则 积多少分
  friendTesyNum?: number | string //好友礼遇次数
  memberDiscountGiveGoods?: EmptyArrayType //付费会员|指定商品规则ID
  memberMonthlyCouponType?: number //付费会员|月赠送券设置类型 0 统一设置 1 单一设置
  monthlyGiveCoupon?: {
    intoAccountDateMonth?: number //单一设置|到账日期中的月，多条递增月数 单位：月
    intoAccountDateDay?: number // 统一设置or 单一设置|到账日期中的日 单位：日
    skuCoupon?: CouponTemplateVO[] | EmptyArrayType //付费会员|月赠送券设置
  }[] //月赠送券
  birthdayGiveCoupon?: EmptyArrayType //生日券
  isPostageCost?: boolean //是否包邮
  bonusPoints?: number //赠送积分
  appointSkusCount?: EmptyObjectType //赠送商品
  appointSkusCoupon?: EmptyObjectType //指定优惠券数量
  appointSkusBirthdayCoupon?: EmptyObjectType //指定生日券数量
  bonusDays?: number //月赠送券日期

  // 音视频
  tvAssociatedMaterial?: EmptyObjectType | string //视频关联素材,
  tvSaleMethodType?: number //视频商品售卖方式
  tvPassWord?: string //视频商品密码
  tvRemark?: string //视频|商品 每集文字说明
  //自定义 关联商品时使用 不给后台传
  spuData?: {
    skus: any[]
  }
}

export interface GiveCouponTemplate {
  id?: number
  name?: string // 优惠券名称
}
export interface QuotaListFormType {
  skuSpecList?: EmptyArrayType
  memberList?: EmptyArrayType
}
export interface QuotaFormType {
  selectId: number //选择项ID 字典id
  itemId?: string //
  singleMinQuota?: number
  singleMaxQuota?: number
  foreverQuota?: number
  ruleList?: QuotaListFormType[]
}

export interface Spu {
  // 接口传参
  spuType?: number //商品类型
  spuId?: number | undefined // SPU 编号
  salesChannel?: EmptyArrayType //销售渠道
  brandId?: number // 商品品牌编号
  spuName?: string //商品名称
  titleName?: string //商品标题(商城)
  subTitleName?: string //商品副标题
  sort?: number // 商品排序
  keyword?: string // 关键字
  introduction?: string // 商品简介
  spuTags?: string // 商品标签
  spuColor?: string // 商品标签颜色
  picUrl?: string // 商品封面图
  imgOblongUrl?: string //商品主图2 长方形
  imgScale?: number //图片视频比例  1:1、3:4、4:3、16:9
  sliderPicUrls?: string[] // 商品轮播图
  isVideo?: boolean //是否有视频文件
  videoImg?: string //视频封面
  videoUrl?: string //视频链接
  videoAutoplay?: boolean //自动播放
  videoMuteplay?: boolean //禁音播放
  categoryId?: number[] // 商品分类编号
  salesOnlineChannel?: EmptyArrayType // 线上商品销售渠道
  deliveryTypes?: number[] // 配送方式
  freightSet?: number //运费设置 1固定运费 2运费模板
  freight?: number | string //固定运费
  deliveryTemplateId?: number | undefined // 运费模版
  productUp?: number //商品上架状态  0 立即上架 1上架隐藏 2 下架 3 定时上架
  productUpTime?: string //商品上架时间
  productDown?: number //商品下架类型 0 关闭 1 定时下架
  productDownTime?: string // 商品下架状态
  tenantNumType?: number //销售门店类型 0全部 1部分
  authorizedTenant?: EmptyArrayType //销售门店
  authorizedMallTenant?: EmptyArrayType //商城

  tenantServiceNumType?: number //服务门店类型 0全部 1部分
  authorizedServiceTenant?: EmptyArrayType //服务门店
  specType?: boolean // 商品规格
  subCommissionType?: boolean // 分销类型
  subCommissionEnable?: boolean //分销开关
  skus?: Sku[] // sku数组
  description?: string // 商品详情
  /**浏览权限 */
  browseAuthority?: EmptyArrayType //浏览权限 0 不限制 1 指定会员等级可见 2 指定付费会员等级可见 4指定标签组可见
  browseMember?: EmptyArrayType //浏览权限 会员
  browsePaidMember?: EmptyArrayType //浏览权限 付费会员
  browseTags?: EmptyArrayType //浏览权限 标签组
  /** 购买权限 */
  buyAuthority?: EmptyArrayType //购买权限
  buyMember?: EmptyArrayType //购买权限 会员
  buyPaidMember?: EmptyArrayType //购买权限 付费会员
  buyTags?: EmptyArrayType //购买权限标签组
  /** 商品限购 */
  quotaAuthority?: number //商品限购
  singleQuotaMini?: number //商品限购 单次最少
  singleQuotaMax?: number //商品限购 单次最多
  permanentQuota?: number //商品限购 永久限购
  /** 营销设置 */
  /** 会员积分获取规则 */
  memberPointsGain?: number //会员积分获取
  memberPointsGainEntry?: any //会员积分获取单独设置
  /** 付费会员积分获取规则 */
  paidmemberPointsGain?: number //付费会员积分获取
  paidmemberPointsGainEntry?: any //付费会员积分获取单独设置,
  /** 会员余额抵扣 */
  memberWalletRule?: number //会员余额抵扣
  memberWalletRuleEntry?: any //会员抵扣单独设置
  /** 付费会员余额抵扣 */
  paidmemberWalletRule?: number //付费会员余额抵扣
  paidmemberWalletRuleEntry?: any //付费会员余额抵扣单独设置,
  /** 会员折扣设置 */
  memberDiscount?: number //会员折扣
  memberDiscountEntry?: any //会员折扣单独设置
  /** 付费会员折扣设置 */
  paidmemberDiscount?: number //付费会员折扣设置
  paidmemberDiscountEntry?: any //付费会员折扣单独设置
  /**代理折扣 */
  agentDiscount?: number //付费会员折扣设置
  agentDiscountEntry?: any //付费会员折扣单独设置
  /**代理返佣 */
  agentRebate?: number //代理返佣设置
  agentRebateEntry?: any //代理返佣
  protocolId?: number
  /**  视频商品 */
  videos?: EmptyArrayType //视频列表
  price?: number | string //零售价
  marketPrice?: number | string // 市场价
  costPrice?: number | string // 成本价

  giveIntegral?: number // 赠送积分
  virtualSalesCount?: number // 虚拟销量
  combinationPrice?: number // 商品拼团价格
  seckillPrice?: number // 商品秒杀价格
  salesCount?: number // 商品销量

  stock?: number // 商品库存
  createTime?: Date // 商品创建时间
  status?: number // 商品状态

  tenantType?: number //商品来源
  spuData?: object //  商品详情(用于显示spu对应sku列表时)
  propertyList?: EmptyArrayType //商品属性列表(用于显示spu对应sku列表时)

  promiseList?: EmptyArrayType //服务承诺 暂未实现

  commissionSet?: QuotaFormType //佣金设置

  // 付费会员
  isOpen?: boolean //付费会员 0 关闭 1 开启
}

// 关联商品所需属性
export interface RelatedProductVO {
  setSpuId: number
  setSkuId: number
  number: number // 活动|规格|活动规则|赠品|SKU 设置数量,示例值(99)
  price?: number //活动价
  proportion?: number // 折扣比例
  goodsType?: number
}
// 扩展 Sku 配置
export type SkuExtension = Sku & {
  productConfig: RelatedProductVO
}
export interface SpuExtension extends Spu {
  skus: SkuExtension[] // 重写类型
}

// 获得 Spu 列表
export const getSpuPage = (params: PageParam) => {
  return request.get({ url: '/product/spu/page', params })
}

// 获得 Spu 列表 tabsCount
export const getTabsCount = (params: { spuType: string }) => {
  return request.get({ url: '/product/spu/get-count', params })
}

// 创建商品 Spu
export const createSpu = (data: Spu) => {
  return request.post({ url: '/product/spu/create', data })
}

// 更新商品 Spu
export const updateSpu = (data: Spu) => {
  return request.put({ url: '/product/spu/update', data })
}

// 更新商品 Spu status
export const updateStatus = (data: { spuId: number; status: number }) => {
  return request.put({ url: '/product/spu/update-status', data })
}

// 获得商品 Spu
export const getSpu = (spuId: number) => {
  return request.get({ url: `/product/spu/get-detail?spuId=${spuId}` })
}

// 获得商品 Spu 详情列表
export const getSpuDetailList = (ids: number[]) => {
  return request.get({ url: `/product/spu/list?spuIds=${ids}` })
}

// 删除商品 Spu
export const deleteSpu = (spuId: number) => {
  return request.delete({ url: `/product/spu/delete?spuId=${spuId}` })
}

// 导出商品 Spu Excel
export const exportSpu = async (params) => {
  return await request.download({ url: '/product/spu/export', params })
}

// 获得商品 SPU 精简列表
export const getSpuSimpleList = async (params?) => {
  return request.get({ url: '/product/spu/list-all-simple', params })
}
// 门店更改sku价格
export const spuUpdatePrice = (params: UpdatePriceVO) => {
  return request.put({ url: '/product/spu/update-price', data: params })
}

export interface UpdatePriceVO {
  spuId: number
  items: { skuId: number; price: number; lowPrice?: number }[]
}
